﻿//#include <stdio.h>
//#include <string.h>

//int main()
//{
//	char str1[10] = "abcd";
//	char str2[10] = "AB\0CD";
//
//	memcpy(str1, str2, 4);
//
//	printf("%s", str1);
//
//	return 0;
//}

//#include <stdio.h>
//#include <string.h>
//
//
//struct {
//	char name[40];
//	int age;
//} person, person_copy;
//
//int main()
//{
//	char myname[] = "Pierre de Fermat";
//
//	memcpy(person.name, myname, strlen(myname) + 1);
//	person.age = 46;
//	memcpy(&person_copy, &person, sizeof(person));
//
//	printf("person_copy: %s, %d \n", person_copy.name, person_copy.age); 
//
//	return 0;
//}

//#include <stdio.h>
//#include <string.h>
//#include <assert.h>
//
//void* my_memcpy(void* dst, const void* src, size_t count)
//{
//	void* ret = dst;
//	assert(dst);
//	assert(src);
//
//	while (count--) {
//		*(char*)dst = *(char*)src;
//		dst = (char*)dst + 1;
//		src = (char*)src + 1;
//	}
//	return(ret);
//}
//
//int main()
//{
//	char str1[] = "ABC DEF GH";
//	char str2[] = "abc def gh";
//
//	my_memcpy(str1, str2, 5);
//
//	printf("%s", str1);
//	return 0;
//}


#include <stdio.h>
#include <string.h>
#include <assert.h>


void* my_memcpy(void* dst, void* src, size_t sz)	//sz 表示字节数
{
	void* res = dst;
	assert(dst && src);

	while (sz--)
	{
		*(char*)dst = *(char*)src;	// 一个字节开始拷贝
		dst = (char*)dst + 1;	// 向后移动一个字节
		src = (char*)src + 1;	
	}

	return res;
}

int main()
{
	int arr[10] = { 0 };
	int b[] = { 1,2,3,4,5 };

	my_memcpy(arr, b, 20);

	return 0;

}
